package partThree;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Locale;

/* 本类用来测试String类的常用方法*/
public class TestString2 {
    public static void main(String[] args) {
        //1.创建字符串
        String s1 = "abc";

        char[] values = {'a','b','c'};
        String s2 = new String(values);

        // 2.测试常用方法
        /* String重写了hashcode()，是根据字符串的内容生成哈希码值的
         *  所以虽然s1与s2一个在堆的常量池中，一个在堆中，但是哈希码值一样*/
        System.out.println(s1.hashCode()); //96354
        System.out.println(s2.hashCode()); //96354

        System.out.println(s1.equals(s2)); //true 重写后比较的是字符串的内容

        System.out.println(s1.toString()); //不需要写，底层会自动调用s1对象的toString
        System.out.println(s1); //abc String 重写了toString()，直接打印的是串的具体内容

        System.out.println(s1.length()); //查看当前字符串的长度
        System.out.println(s1.toUpperCase()); //将字符串转为全大写
        System.out.println(s1.toLowerCase());//将字符串转为全小写
        System.out.println(s1.startsWith("a")); //判断本字符串是否已指定元素开头
        System.out.println(s1.endsWith("c"));//判断本字符串是否已指定元素结尾

        System.out.println(s1.charAt(0)); //返回指定索引/下标处的 char 值/字符
        String s3 = "abcabcbdbdbabcbbdbabcb";
        System.out.println(s3.indexOf("c")); //返回指定字符在此字符串中第一次出现处的索引
        System.out.println(s3.lastIndexOf("b")); //返回指定字符在此字符串中最后一次出现处的索引

        System.out.println(s2.concat("xxv")); //将指定字符串连接/拼接到此字符串的结尾,注意:不会改变原串
        System.out.println(s2);
        String s4 = s2 .concat("aaa");
        System.out.println(s4); //此时s4就是拼接后，改变原字符串的字符串

        String s5 = "afdfbfcfdfe";
        //返回值类型是String【】，所以需要使用Arrays.toString()打印
        //以指定字符作为分隔符，分割当前字符
        System.out.println(Arrays.toString(s5.split("f"))); //根据给定元素来分隔此字符串
        //打印后可以发现，分割后的空格，不是将f替换成的，只是因为Arryas打印的原因
        String[] a = s5.split("f");
        for (int i = 0; i < a.length; i++) {//fori+enter   创建遍历的快速方式
            System.out.println(a[i]);
        }

        String s6 = "      hhhh    hhh   ";
        System.out.println(s6.trim()); //返回去除首尾空格的字符串

        String s7 = "abcdefgh";
        System.out.println(s7.substring(3));//返回一个新子串,从指定下标处开始,包含指定下标
        System.out.println(s7.substring(3,6));//返回一个新子串,从指定下标开始,到结束下标为止,但不包含结束下标

        System.out.println(String.valueOf(10)); //10
        System.out.println("20"+10); //2010
        System.out.println(20+10); //30
        System.out.println(String.valueOf(80)+10);//8010  把int转成String

        byte[] bytes = s7.getBytes(); //将指定字符串转为byte类型的数组
    }
}